 // 导入express
const express = require('express')
 // 创建服务器的实列对象
const app = express()
const joi = require('@hapi/joi')
const expressJWT = require('express-jwt')
const config =require('./config')

 // 导入cors 中间键
const cors = require('cors')
 // 将cors 注册为全局中间键
app.use(cors())
 //配置解析表单数据的中间键 ,注意 只能 解析application/x-www-form-urlencoded 格式表单数据
app.use(express.urlencoded({ extended: false }))



//处理跨域问题
const bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json())


app.use((req, res, next) => {
    //status 默认1 表示失败
    //err的值，可能是个错误对象，也可能是一个错误的描述字符串
    res.cc = function (err, status = 1){
        res.send({
            status,
            message: err instanceof Error ? err.message : err
        })
    }
    
    next()
})

// 配置解析Token 中间键
app.use(expressJWT({secret: config.jwtSecreKey}).unless({path: [/^\/api/]}))


// //导入路由模块
const userRouter = require('../api_server/router/user')
app.use('/api',userRouter)

// 错误级别的中间键
app.use((err, req, res,next) => {
    // 验证错误
    if(err instanceof joi.ValidationError) res.cc(err)
    //身份认证失败
    if(err.name === 'UnauthorizedError') return res.cc('身份认证失败')
    // 未知错误
    res.cc(err)
})

// //启动服务器

app.listen(3007,function(){
    console.log('api serve running at http://127.0.0.1:3007')
})